MIP
  • Results (DRAFT)
52-week current policies retire
  • Capacity and Generation
  • Retirements
  • Capacity Tables
  • Transmission Expansion
  • Emissions
  • Dispatch
  • Capacity Factors
  • Operational Results
  • Total Capacity
  • New-build Capacity
  • Existing Capacity
  • Total Capacity (wide)
  • Regional Capacity
  • Total Generation
  • New-build Generation
  • Existing Generation
  • Total Generation (wide)
  • Total Generation over time
  • Regional Generation
  • Retired Capacity
  • Retired Regional Capacity
  • Total Start Existing Capacity
  • Total End Existing Capacity
  • Regional End Existing Capacity
tech_type planning_year GenX SWITCH TEMOA USENSYS
Battery 2027 21914 21914 21847 21854
Battery 2030 21914 21914 18860 21719
Battery 2035 21914 21914 18843 20535
Battery 2040 21914 21914 18832 84
Battery 2045 21914 21914 18808 nan
Battery 2050 21914 21914 18796 nan
Coal 2027 161728 161727 118801 74714
Coal 2030 65655 61699 72392 89086
Coal 2035 65539 57119 72390 104469
Coal 2040 65537 55140 72390 75340
Coal 2045 65530 55139 72385 54467
Coal 2050 65527 55138 72384 28466
Distributed Solar 2027 47556 0 47886 47556
Distributed Solar 2030 72304 0 47886 72304
Distributed Solar 2035 96511 0 72744 96511
Distributed Solar 2040 102759 0 97023 102759
Distributed Solar 2045 107818 0 103282 107818
Distributed Solar 2050 116123 0 108371 116123
Geothermal 2027 1838 1836 825 676
Geothermal 2030 1838 1836 825 621
Geothermal 2035 1838 1836 825 591
Geothermal 2040 1838 1836 825 398
Geothermal 2045 1838 1836 825 217
Geothermal 2050 1838 1836 825 100
Hydro 2027 99080 99021 94302 94746
Hydro 2030 99073 99015 94302 92716
Hydro 2035 99073 99015 94302 91778
Hydro 2040 99073 99015 94302 89100
Hydro 2045 99073 99015 94302 84874
Hydro 2050 99073 99015 94302 81492
Natural Gas CC 2027 316600 316600 296246 283019
Natural Gas CC 2030 286464 286440 282567 274549
Natural Gas CC 2035 280072 283543 276338 296446
Natural Gas CC 2040 280069 283542 277290 297744
Natural Gas CC 2045 280052 283035 277283 295809
Natural Gas CC 2050 280048 283035 277278 287605
Natural Gas CT 2027 148779 148779 129370 106626
Natural Gas CT 2030 108817 108694 107856 99961
Natural Gas CT 2035 100411 101709 100781 133160
Natural Gas CT 2040 100407 101509 102035 130476
Natural Gas CT 2045 100401 101509 102024 119360
Natural Gas CT 2050 100397 101508 102023 95276
Nuclear 2027 97038 97038 97038 97038
Nuclear 2030 97038 97038 96100 97038
Nuclear 2035 97038 97038 96100 97038
Nuclear 2040 97038 97037 69835 97038
Nuclear 2045 52329 54601 51980 97038
Nuclear 2050 51982 53939 50261 94298
Solar 2027 115692 115692 115693 115692
Solar 2030 115683 115685 115693 115685
Solar 2035 115678 115685 115693 115677
Solar 2040 115674 115685 115693 115288
Solar 2045 115662 115684 115693 103531
Solar 2050 115661 115681 115693 69623
Wind 2027 155903 152905 155395 155364
Wind 2030 155854 155801 155395 154581
Wind 2035 155829 155799 155395 148440
Wind 2040 155733 155799 155395 117636
Wind 2045 155712 155794 155395 83549
Wind 2050 155697 155793 155395 37428
tech_type planning_year GenX SWITCH TEMOA USENSYS
Battery 2027 21914 21914 18860 21854
Battery 2030 21914 21914 18843 21719
Battery 2035 21914 21914 18832 20535
Battery 2040 21914 21914 18808 84
Battery 2045 21914 21914 18796 nan
Battery 2050 21914 21914 18789 nan
Coal 2027 65655 68492 72392 74714
Coal 2030 65539 61691 72390 89086
Coal 2035 65537 57119 72390 104469
Coal 2040 65530 55139 72385 75340
Coal 2045 65527 55139 72384 54467
Coal 2050 65505 55132 72381 28466
Distributed Solar 2027 47556 47886 47886 47556
Distributed Solar 2030 72304 72744 72744 72304
Distributed Solar 2035 96511 97023 97023 96511
Distributed Solar 2040 102759 103282 103282 102759
Distributed Solar 2045 107818 108374 108371 107818
Distributed Solar 2050 116123 116713 116713 116123
Geothermal 2027 1838 1836 825 676
Geothermal 2030 1838 1836 825 621
Geothermal 2035 1838 1836 825 591
Geothermal 2040 1838 1836 825 398
Geothermal 2045 1838 1836 825 217
Geothermal 2050 1838 1836 824 100
Hydro 2027 99080 99021 94302 94746
Hydro 2030 99073 99015 94302 92716
Hydro 2035 99073 99015 94302 91778
Hydro 2040 99073 99015 94302 89100
Hydro 2045 99073 99015 94302 84874
Hydro 2050 99073 99015 94302 81492
Natural Gas CC 2027 286464 286440 283531 283019
Natural Gas CC 2030 280072 283840 276338 274549
Natural Gas CC 2035 280069 283542 277290 296446
Natural Gas CC 2040 280052 283542 277283 297744
Natural Gas CC 2045 280048 283035 277288 295809
Natural Gas CC 2050 280023 283026 277275 287605
Natural Gas CT 2027 108817 108694 109111 106626
Natural Gas CT 2030 100411 102791 100781 99961
Natural Gas CT 2035 100407 101709 102035 133160
Natural Gas CT 2040 100401 101508 102024 130476
Natural Gas CT 2045 100397 101508 102023 119360
Natural Gas CT 2050 100378 101503 102019 95276
Nuclear 2027 97038 97038 96100 97038
Nuclear 2030 97038 97038 96100 97038
Nuclear 2035 97038 97038 96100 97038
Nuclear 2040 52329 54601 51980 97038
Nuclear 2045 51982 53939 50261 97038
Nuclear 2050 42152 42228 39566 94298
Solar 2027 115683 115692 115693 115692
Solar 2030 115678 115685 115693 115685
Solar 2035 115674 115685 115693 115677
Solar 2040 115662 115683 115693 115288
Solar 2045 115661 115683 115693 103531
Solar 2050 115650 115676 115693 69623
Wind 2027 155854 154374 155395 155364
Wind 2030 155829 155799 155395 154581
Wind 2035 155733 155798 155395 148440
Wind 2040 155712 155794 155395 117636
Wind 2045 155697 155794 155395 83549
Wind 2050 155672 155779 155395 37428
agg_zone tech_type resource_name planning_year GenX SWITCH TEMOA USENSYS
Loading ITables v2.2.3 from the internet... (need help?)
  • Expansion by line
  • Total expansion
  • Total expansion map
  • Total expansion map (drop lines < 50MW)
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, include, exclude)
   2154         # see https://github.com/ipython/ipython/issues/11038
   2155         try:
   2156             dct = self.to_dict()
   2157         except Exception:
-> 2158             utils.display_traceback(in_ipython=True)
   2159             return {}
   2160         else:
   2161             return renderers.get()(dct)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
    846 
    847         # TopLevelMixin instance does not necessarily have to_dict defined
    848         # but due to how Altair is set up this should hold.
    849         # Too complex to type hint right now
--> 850         dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
    851 
    852         # TODO: following entries are added after validation. Should they be validated?
    853         if is_top_level:

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
--> 338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
    340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 338 def _todict(obj, context):
    339     """Convert an object to a dict representation."""
    340     if isinstance(obj, SchemaBase):
    341         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
   2516             # for easier specification of datum encodings.
   2517             copy = self.copy(deep=False)
   2518             copy.data = core.InlineData(values=[{}])
   2519             return super(Chart, copy).to_dict(*args, **kwargs)
-> 2520         return super().to_dict(*args, **kwargs)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py in ?(self, *args, **kwargs)
    846 
    847         # TopLevelMixin instance does not necessarily have to_dict defined
    848         # but due to how Altair is set up this should hold.
    849         # Too complex to type hint right now
--> 850         dct = super(TopLevelMixin, copy).to_dict(*args, **kwargs)  # type: ignore[misc]
    851 
    852         # TODO: following entries are added after validation. Should they be validated?
    853         if is_top_level:

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(self, validate, ignore, context)
    792                 k: v for k, v in kwds.items() if k not in list(ignore) + ["shorthand"]
    793             }
    794             if "mark" in kwds and isinstance(kwds["mark"], str):
    795                 kwds["mark"] = {"type": kwds["mark"]}
--> 796             result = _todict(
    797                 kwds,
    798                 context=context,
    799             )

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
--> 340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):
    342         return obj.to_dict()
    343     elif isinstance(obj, np.number):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 340 def _todict(obj, context):
    341     """Convert an object to a dict representation."""
    342     if isinstance(obj, SchemaBase):
    343         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
    336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
--> 338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):
    340         return {k: _todict(v, context) for k, v in obj.items() if v is not Undefined}
    341     elif hasattr(obj, "to_dict"):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(.0)
--> 338 def _todict(obj, context):
    339     """Convert an object to a dict representation."""
    340     if isinstance(obj, SchemaBase):
    341         return obj.to_dict(validate=False, context=context)

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/schemapi.py in ?(obj, context)
    333 def _todict(obj, context):
    334     """Convert an object to a dict representation."""
    335     if isinstance(obj, SchemaBase):
--> 336         return obj.to_dict(validate=False, context=context)
    337     elif isinstance(obj, (list, tuple, np.ndarray)):
    338         return [_todict(v, context) for v in obj]
    339     elif isinstance(obj, dict):

/opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/schema/channels.py in ?(self, validate, ignore, context)
     43                 # We still parse it out of the shorthand, but drop it here.
     44                 parsed.pop('type', None)
     45             elif not (type_in_shorthand or type_defined_explicitly):
     46                 if isinstance(context.get('data', None), pd.DataFrame):
---> 47                     raise ValueError(
     48                         'Unable to determine data type for the field "{}";'
     49                         " verify that the field name is not misspelled."
     50                         " If you are referencing a field from a transform,"

ValueError: Unable to determine data type for the field "ln"; verify that the field name is not misspelled. If you are referencing a field from a transform, also confirm that the data type is specified correctly.
alt.LayerChart(...)
  • Emissions
  • Emissions intensity
  • 2030 Dispatch
  • 2040 Dispatch
  • 2050 Dispatch
  • Tab 4
  • Tab 5
  • Tab 6
---------------------------------------------------------------------------
ValueError                                Traceback (most recent call last)
File /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/IPython/core/formatters.py:977, in MimeBundleFormatter.__call__(self, obj, include, exclude)
    974     method = get_real_method(obj, self.print_method)
    976     if method is not None:
--> 977         return method(include=include, exclude=exclude)
    978     return None
    979 else:

File /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/api.py:2161, in TopLevelMixin._repr_mimebundle_(self, include, exclude)
   2159     return {}
   2160 else:
-> 2161     return renderers.get()(dct)

File /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/vegalite/v5/display.py:65, in svg_renderer(spec, **metadata)
     64 def svg_renderer(spec, **metadata):
---> 65     return spec_to_mimebundle(
     66         spec,
     67         format="svg",
     68         mode="vega-lite",
     69         vega_version=VEGA_VERSION,
     70         vegaembed_version=VEGAEMBED_VERSION,
     71         vegalite_version=VEGALITE_VERSION,
     72         **metadata,
     73     )

File /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/mimebundle.py:51, in spec_to_mimebundle(spec, format, mode, vega_version, vegaembed_version, vegalite_version, engine, **kwargs)
     48     raise ValueError("mode must be 'vega-lite'")
     50 if format in ["png", "svg", "pdf", "vega"]:
---> 51     return _spec_to_mimebundle_with_engine(
     52         spec, format, mode, engine=engine, **kwargs
     53     )
     54 if format == "html":
     55     html = spec_to_html(
     56         spec,
     57         mode=mode,
   (...)
     61         **kwargs,
     62     )

File /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/mimebundle.py:95, in _spec_to_mimebundle_with_engine(spec, format, mode, **kwargs)
     92 # Normalize the engine string (if any) by lower casing
     93 # and removing underscores and hyphens
     94 engine = kwargs.pop("engine", None)
---> 95 normalized_engine = _validate_normalize_engine(engine, format)
     97 if normalized_engine == "vlconvert":
     98     import vl_convert as vlc

File /opt/hostedtoolcache/Python/3.10.15/x64/lib/python3.10/site-packages/altair/utils/mimebundle.py:186, in _validate_normalize_engine(engine, format)
    181             raise ValueError(
    182                 "Saving charts in {fmt!r} format requires the altair_saver package: "
    183                 "see http://github.com/altair-viz/altair_saver/".format(fmt=format)
    184             )
    185         else:
--> 186             raise ValueError(
    187                 "Saving charts in {fmt!r} format requires the vl-convert-python or altair_saver package: "
    188                 "see http://github.com/altair-viz/altair_saver/".format(fmt=format)
    189             )
    190 else:
    191     raise ValueError(
    192         "Invalid conversion engine {engine!r}. Expected one of {valid!r}".format(
    193             engine=engine, valid=("vl-convert", "altair_saver")
    194         )
    195     )

ValueError: Saving charts in 'svg' format requires the vl-convert-python or altair_saver package: see http://github.com/altair-viz/altair_saver/
alt.Chart(...)
  • Battery
  • Solar
  • Wind
  • Natural Gas CC
  • Natural Gas CT
  • Coal
  • Hydro
  • Operational costs (model)
  • Operational costs (society)
  • Operational NSE
  • Generation
  • Emissions by zone
  • Power cost